/*
 * Projeto idealizado para ensino interativo com uso de recursos Flash e Java
 * O uso destes codigos eh de extrema restricao, valendo dos direitos dos seus
 * desenvolvedores
 * 
 * @author Fabricio Silva 
 */
package br.com.dimensaointerativo.recursos;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Properties;

/**
 * Contem todos os elementos funcionais para o projeto, visto sua generalidade
 * estes recursos sao alocados em uma regiao a parte do sistema.
 *
 * @author Fabricio Silva
 *
 */
public class RecursosUteis {
	public static Properties confBanco;
	
	/**
	 * Trabalhando com leitura do arquivo de configuracoes 
	 * para estabelecer conexao com a base de dados
	 * 
	 * @author Fabricio Silva
	 * @throws IOException
	 */
	public static void carregarConfiguracoes() throws IOException {
		File arq = new File("./confBanco.properties");
		FileInputStream fInp = null;
		BufferedInputStream buf = null;
		confBanco = new Properties();
		
		try {
			fInp = new FileInputStream(arq);
			buf = new BufferedInputStream(fInp);
			
			// Lendo informacoes do arquivo
			confBanco.load(buf);
			
			// Liberando recursos alocados						
			buf.close();
			fInp.close();
			fInp = null;
			buf = null;
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/*
	 * Gera um Hash de 40 caracteres da senha do operador.
	 * Esses caracteres representam os 20 bytes do hash
	 * formatados com 2 casas decimais no base hexadecimal. 
	 */
	public static String gerarHash(String senha){
		MessageDigest md = null;
		byte[] senhaHash = null;
		StringBuilder sb = new StringBuilder();

		try{
			md = MessageDigest.getInstance("SHA1");	
		}catch(NoSuchAlgorithmException e){
			//O algoritmo SHA1 existe e essa exceção nao será lançada.
		}
		
		senhaHash = md.digest(senha.getBytes());
		
		/*
		 * Converte o array de bytes em um números
		 * hexadecimais formatados com 2 casas decimais.
		 * Essa é a forma com que o servidores de banco
		 * de dados e outros servidores trabalham com
		 * hash de senhas. 
		 */
		for(int i = 0; i < senhaHash.length; i++){
            int j = (int)(senhaHash[i] & 0x000000ff);
            if(j > 0xf){
            	sb.append(Integer.toHexString(j));
            }else{
                sb.append('0');
                sb.append(Integer.toHexString(j));
            }
		}
		return sb.toString();			
	}
}

